.\"
.\" $Id: tst_sig.3,v 1.1 2000/07/27 16:59:03 alaffin Exp $
.\"
.\" Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
.\"
.\" This program is free software; you can redistribute it and/or modify it
.\" under the terms of version 2 of the GNU General Public License as
.\" published by the Free Software Foundation.
.\"
.\" This program is distributed in the hope that it would be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.\"
.\" Further, this software is distributed without any warranty that it is
.\" free of the rightful claim of any third person regarding infringement
.\" or the like.  Any license provided herein, whether implied or
.\" otherwise, applies only to this software file.  Patent licenses, if
.\" any, provided herein do not apply to combinations of this program with
.\" other software, or any other product whatsoever.
.\"
.\" You should have received a copy of the GNU General Public License along
.\" with this program; if not, write the Free Software Foundation, Inc.,
.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
.\"
.\" Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
.\" Mountain View, CA  94043, or:
.\"
.\" http://www.sgi.com
.\"
.\" For further information regarding this notice, see:
.\"
.\" http://oss.sgi.com/projects/GenInfo/NoticeExplan/
.\"
.TH TST_SIG 3 07/25/2000 "Linux Test Project"
.SH NAME
tst_sig \- set up for unexpected signals
.SH SYNOPSIS
.nf
\fB
#include "test.h"

void tst_sig(fork_flag, handler, cleanup)
char *fork_flag;
int (*handler)();
void (*cleanup)();
\fR
.fi
.SH DESCRIPTION
.P
\fItst_sig\fR is used by UNICOS test case programs
to set up signal handling functions for unexpected
signals.  This provides test cases with a graceful means
of exiting following an unexpected interruption by a signal.
\fItst_sig\fR should be called only once by a test
program.
.P
The \fIfork_flag\fR parameter is used to tell \fItst_sig\fR
whether or not to ignore the SIGCHLD signal caused by the death of a
child process that had previously been created by the
\fIfork\fR(2) system call (see \fIsignal\fR(2) for more
information on the SIGCHLD signal).
.P
Setting \fIfork_flag\fR to FORK will cause \fItst_sig\fR to
ignore the SIGCHLD signal.  This option should be set if the
test program directly (eg. call \fIfork\fR(2)) or indirectly
(eg. call \fIsystem\fR(3S)) creates a child process.
.P
Setting \fIfork_flag\fR to NOFORK will cause \fItst_sig\fR to
treat the SIGCHLD signal just as any other unexpected
signal (ie. the \fIhandler\fR will be called).
This option should be set by any test program which does not
directly or indirectly create any child processes.
.P
The \fIhandler\fR parameter is
a pointer to a function returning type int which is
executed upon the receipt of an unexpected signal.
The test program may pass a pointer to a signal handling
function or it may elect to use a \fIdefault handler\fR
supplied by \fItst_sig\fR.

The \fIdefault handler\fR is specified by passing DEF_HANDLER
as the \fIhandler\fR argument.  Upon receipt of an unexpected
signal, the \fIdefault handler\fR will generate
\fItst_res\fR(3) messages for all test results that had
not been completed at the time of the signal, execute the
\fIcleanup\fR routine, if provided, and call \fItst_exit\fR.
Note: if the \fIdefault handler\fR is used, the variables
\fBTCID\fR and \fBtst_count\fR must be defined and available to
\fItst_sig\fR (see \fItst_res\fR(3)).
.P
The \fIcleanup\fR parameter is a pointer to a user-defined
function returning type void which is executed
by the \fIdefault handler\fR.  The \fIcleanup\fR function
should remove any files, directories, processes, etc. created
by the test program.
If no cleanup is required, this parameter should be set to NULL.

.SH EXAMPLES

.nf
#include "test.h"

/*
 * the TCID and TST_TOTAL variables must be available to tst_sig
 * if the \fIdefault handler\fR is used.  The \fIdefault handler\fR will call
 * \fItst_res\fR(3) and will need this information.
 */
int TCID = "tsttcs01";  /* set test case identifier */
int TST_TOTAL = 5;        /* set total number of test results */


	void tst_sig();

	/*
	 * set up for unexpected signals:
	 *		no \fIfork\fR() system calls will be executed during the test run
	 *		use the default signal handler provided by \fItst_sig\fR
	 *		no cleanup is necessary
	 */
	tst_sig(NOFORK, DEF_HANDLER, NULL);


	void tst_sig(), cleanup();
	int handler();

	/*
	 * set up for unexpected signals:
	 *		\fIfork\fR() system calls will be executed during the test run
	 *		use user-defined signal handler
	 *		use cleanup
	 */
	tst_sig(FORK, handler, cleanup);

.fi
.SH "SEE ALSO"
signal(2),
tst_setup(1).
.SH DIAGNOSTICS
.P
\fItst_sig\fR will output warnings in standard \fItst_res\fR
format if it cannot set up the signal handlers.
